/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package administrador;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author DanielSilva
 */
public class RestaurarDesdeRespInternet {

    /*
     Esta Clase permite que se restaure la informacion desde la base de datos
     de respaldos de Internet. Si es el caso que se dano la computadora a 
     * partir del ultimo respaldo de base de datos se puede rescatar 
     * la informacion de:
     * Clientes
     * Pedidos
     * Separados
     * Pados separados
     * Cantidades del inventario hasta la ultima fecha de respaldo web.
     */
    
    
    /*
     Ojo Muchos de los campos se tienen que parametrizar
     * para que tenga exito la restauracion.
     */
    
    Conexion conexionWeb;
    Conexion conexionLocal;
    //Es necesario especificar el parametro de bodega:
    String bodega = "20";

    public static void main(String args[]) {
        RestaurarDesdeRespInternet rdri = new RestaurarDesdeRespInternet();
    }

    public RestaurarDesdeRespInternet() {

        if (realizoConexionWeb() && realizoConexionLocal()) {
            procesoDeRestauracioRespInternet();
        }

    }

    public boolean realizoConexionWeb() {

        boolean exito = false;

        String IPCliente = "174.136.152.21";// "174.136.152.21";
        String nombre = "sexyusuario";//"daniel1";
        String password = "yxes1984";
        String dbcliente = "sexylocuras";
        String puerto = "3306";

        //Realizo la conexion a la base de datos Antigua cliente:
        conexionWeb = new Conexion();
        if (!conexionWeb.conectarBase(nombre, password, puerto, dbcliente, IPCliente)) {
           //System.out.println("No pudo establecer la conexion WEB");

        } else {
            exito = true;
           //System.out.println("Conexion Web exitosa");
        }

        return exito;
    }

    public boolean realizoConexionLocal() {

        boolean exito = false;
        String IPCliente = "localhost";// 
        String nombre = "root";//"daniel1";
        String password = "rosabarre1320";
        String dbcliente = "bdmultiadmin";
        String puerto = "3306";

        //Realizo la conexion a la base de datos Antigua cliente:
        conexionLocal = new Conexion();
        if (!conexionLocal.conectarBase(nombre, password, puerto, dbcliente, IPCliente)) {
           //System.out.println("No pudo establecer la conexion LOCAL");

        } else {
            exito = true;
           //System.out.println("Conexion LOCAL exitosa");
        }
        return exito;
    }

    private void procesoDeRestauracioRespInternet() {
       //System.out.println("");
       //System.out.println("Realiza Restauracion");
       //System.out.println("");

        //1)
        //Recorro todos los clientes registrados para esta bodega e 
        //ingreso los que no tengo registrados en la base local.

        ResultSet clientesTempR = conexionWeb.consultarBase("SELECT * FROM sexylocuras.temp_cliente "
                + "where cod_bodega=" + bodega + " ;");

        try {
            clientesTempR.beforeFirst();
            while (clientesTempR.next()) {
                //Inserto en la base Local:
                String codigoCliente = clientesTempR.getString(2);

                ResultSet clientesTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.cliente "
                        + "where cod_cliente='" + codigoCliente + "' ;");
                int filas = conexionLocal.obtenerFilas(clientesTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la inserciÃ³n:
                    String query = "insert into cliente values("
                            + "'" + clientesTempR.getString(2) + "',"
                            + "'" + clientesTempR.getString(3) + "',"
                            + "'" + clientesTempR.getString(4) + "',"
                            + "'" + clientesTempR.getString(5) + "',"
                            + "'" + clientesTempR.getString(6) + "',"
                            + "'" + clientesTempR.getString(7) + "',"
                            + "'" + clientesTempR.getString(8) + "',"
                            + "'" + clientesTempR.getString(9) + "',"
                            + "'" + clientesTempR.getString(10) + "',"
                            + "'" + clientesTempR.getString(11) + "',"
                            + "'" + clientesTempR.getString(12) + "',"
                            + "'" + clientesTempR.getString(13) + "',"
                            + "'" + clientesTempR.getString(14) + "',"
                            + "'" + clientesTempR.getString(15) + "',"
                            + "'" + clientesTempR.getString(16) + "',"
                            + "'" + clientesTempR.getString(17) + "',"
                            + "'" + clientesTempR.getString(18) + "',"
                            + "'" + clientesTempR.getString(19) + "',"
                            + "" + clientesTempR.getString(20) + ","
                            + "'" + clientesTempR.getString(21) + "'"
                            + ");";

                   //System.out.println(query);
                    //Actualizo:
                    conexionLocal.actualizarBaseResp(query);
                }

            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }






        //2)
        //Recorro todos los Separados registrados para esta bodega e 
        //ingreso los que no tengo registrados en la base local.

        ResultSet separadosTempR = conexionWeb.consultarBase("SELECT * FROM sexylocuras.temp_separado "
                + "where cod_bodega=" + bodega + " ;");

        try {
            separadosTempR.beforeFirst();
            while (separadosTempR.next()) {
                //Inserto en la base Local:
                String codigoSeparado = separadosTempR.getString(2);

                ResultSet clientesTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.separado "
                        + "where codigo=" + codigoSeparado + " ;");
                int filas = conexionLocal.obtenerFilas(clientesTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la inserciÃ³n:
                    String query = "insert into bdmultiadmin.separado values("
                            + "" + separadosTempR.getString(2) + ","
                            + "'" + separadosTempR.getString(3) + "',"
                            + "'" + separadosTempR.getString(4) + "',"
                            + "" + separadosTempR.getString(5) + ","
                            + "" + separadosTempR.getString(6) + ","
                            + "" + separadosTempR.getString(7) + ","
                            + "" + separadosTempR.getString(8) + ","
                            + "" + separadosTempR.getString(9) + ","
                            + "'" + separadosTempR.getString(10) + "'"
                            + ");";

                   //System.out.println(query);
                    //Actualizo:
                    conexionLocal.actualizarBaseResp(query);
                }

            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }





        //3)
        //Recorro todos los Pagos de Separados registrados para esta bodega e 
        //ingreso los que no tengo registrados en la base local.

        ResultSet pagossepTempR = conexionWeb.consultarBase("SELECT * FROM sexylocuras.temp_pago_separado "
                + "where cod_bodega=" + bodega + " ;");

        try {
            pagossepTempR.beforeFirst();
            while (pagossepTempR.next()) {
                //Inserto en la base Local:
                String codigoPagoSeparado = pagossepTempR.getString(2);
                String codigoSeparado = pagossepTempR.getString(3);
                String codigoCliente = pagossepTempR.getString(4);

                ResultSet clientesTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.pago_separado "
                        + "where codigo=" + codigoPagoSeparado + " "
                        + "and cod_separado=" + codigoSeparado + " "
                        + "and cod_cliente='" + codigoCliente + "' "
                        + ";");
                int filas = conexionLocal.obtenerFilas(clientesTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la inserciÃ³n:
                    String query = "insert into bdmultiadmin.pago_separado values("
                            + "" + pagossepTempR.getString(2) + ","
                            + "" + pagossepTempR.getString(3) + ","
                            + "" + pagossepTempR.getString(4) + ","
                            + "'" + pagossepTempR.getString(5) + "',"
                            + "" + pagossepTempR.getString(6) + ","
                            + "'" + pagossepTempR.getString(7) + "',"
                            + "'" + pagossepTempR.getString(8) + "'"
                            + ");";

                   //System.out.println(query);
                    //Actualizo:
                    //conexionLocal.actualizarBaseResp(query);
                }

            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }






        //4)
        //Recorro los Pedidos registrados para esta bodega e 
        //ingreso los que no tengo registrados en la base local.

        //Es necesario ingresar el codigo de la ultima factura correctamente registrada
        //en la base de datos de respaldo local:
        int codigoInicalFacturaRecuperar = 2554;

        ResultSet pedidoTempR = conexionWeb.consultarBase("SELECT * FROM sexylocuras.temp_pedido "
                + "where cod_bodega=" + bodega + " and cod_pedido>" + codigoInicalFacturaRecuperar + " ;");

        try {
            pedidoTempR.beforeFirst();
            while (pedidoTempR.next()) {
                //Inserto en la base Local:
                String codigoPedido = pedidoTempR.getString(2);

                ResultSet pedidoTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.pedido "
                        + "where cod_pedido=" + codigoPedido + " "
                        + ";");
                int filas = conexionLocal.obtenerFilas(pedidoTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la inserciÃ³n:

                    String fechaAnulacion = "";
                    //Fecha de anulacion no puede ser null:
                    if (pedidoTempR.getString(15) == null) {
                        fechaAnulacion = "null";
                    } else {
                        fechaAnulacion = "'" + pedidoTempR.getString(15) + "'";
                    }


                    String query = "insert into bdmultiadmin.pedido values("
                            + "" + pedidoTempR.getString(2) + ","
                            + "'" + pedidoTempR.getString(23) + "',"
                            + "'" + pedidoTempR.getString(3) + "',"
                            + "'" + pedidoTempR.getString(4) + "',"
                            + "'" + pedidoTempR.getString(5) + "',"
                            + "'" + pedidoTempR.getString(6) + "',"
                            + "'" + pedidoTempR.getString(7) + "',"
                            + "'" + pedidoTempR.getString(8) + "',"
                            + "'" + pedidoTempR.getString(9) + "',"
                            + "" + pedidoTempR.getString(10) + ","
                            + "" + pedidoTempR.getString(11) + ","
                            + "" + pedidoTempR.getString(12) + ","
                            + "" + pedidoTempR.getString(13) + ","
                            + "'" + pedidoTempR.getString(14) + "',"
                            + "" + fechaAnulacion + ","
                            + "'" + pedidoTempR.getString(16) + "',"
                            + "'" + pedidoTempR.getString(17) + "',"
                            + "" + pedidoTempR.getString(18) + ","
                            + "" + pedidoTempR.getString(19) + ","
                            + "" + pedidoTempR.getString(20) + ","
                            + "" + pedidoTempR.getString(21) + ","
                            + "'" + pedidoTempR.getString(22) + "',"
                            + "'" + pedidoTempR.getString(24) + "'"
                            + ");";

                   //System.out.println(query);
                    //Actualizo:
                    conexionLocal.actualizarBaseResp(query);


                    //Tambien realizo la insercion de los detalles pedidos:
                    insertoDetallesPedidos(codigoPedido);



                }

            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }








        //5)
        //Recorro los Kfacturas (compras y ventas) registrados para esta bodega e 
        //ingreso los que no tengo registrados en la base local.

        //Es necesario ingresar el codigo de la ultima factura correctamente registrada
        //en la base de datos de respaldo local:
        int codigoInicalKFacturaRecuperar = 154;

        ResultSet kfacturaTempR = conexionWeb.consultarBase("SELECT * FROM sexylocuras.temp_kfactura "
                + "where cod_bodega=" + bodega + " and cod_kfactura>" + codigoInicalKFacturaRecuperar + " ;");

        try {
            kfacturaTempR.beforeFirst();
            while (kfacturaTempR.next()) {
                //Inserto en la base Local:
                String codigoKFactura = kfacturaTempR.getString(2);

                ResultSet kfacturaTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.kfactura "
                        + "where cod_kfactura=" + codigoKFactura + " "
                        + ";");
                int filas = conexionLocal.obtenerFilas(kfacturaTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la inserciÃ³n:

                    String fechaAnulacion = "";
                    //Fecha de anulacion no puede ser null:
                    if (kfacturaTempR.getString(16) == null) {
                        fechaAnulacion = "null";
                    } else {
                        fechaAnulacion = "'" + kfacturaTempR.getString(16) + "'";
                    }


                    String query = "insert into bdmultiadmin.kfactura values("
                            + "" + kfacturaTempR.getString(2) + ","
                            + "'" + kfacturaTempR.getString(3) + "',"
                            + "'" + kfacturaTempR.getString(4) + "',"
                            + "'" + kfacturaTempR.getString(5) + "',"
                            + "'" + kfacturaTempR.getString(6) + "',"
                            + "'" + kfacturaTempR.getString(7) + "',"
                            + "'" + kfacturaTempR.getString(8) + "',"
                            + "'" + kfacturaTempR.getString(9) + "',"
                            + "'" + kfacturaTempR.getString(10) + "',"
                            + "" + kfacturaTempR.getString(11) + ","
                            + "" + kfacturaTempR.getString(12) + ","
                            + "" + kfacturaTempR.getString(13) + ","
                            + "" + kfacturaTempR.getString(14) + ","
                            + "'" + kfacturaTempR.getString(15) + "',"
                            + "" + fechaAnulacion + ","
                            + "'" + kfacturaTempR.getString(17) + "',"
                            + "'" + kfacturaTempR.getString(18) + "',"
                            + "" + kfacturaTempR.getString(19) + ","
                            + "" + kfacturaTempR.getString(20) + ","
                            + "'" + kfacturaTempR.getString(21) + "',"
                            + "" + kfacturaTempR.getString(22) + ""
                            + ");";

                   //System.out.println(query);
                    //Actualizo:
                    conexionLocal.actualizarBaseResp(query);


                    //Tambien realizo la insercion de los detalles pedidos:
                    insertoDetallesKFactura(codigoKFactura);



                }

            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }



        //6)
        //Recorro el Inventario 
        //Dejo las cantidades de los productos del ultimo inventario:

        //Borro Cantidades del inventario:
        conexionLocal.actualizarBase("update producto set stock_total=0;");
        //Actualizo ItmProducto
        conexionLocal.actualizarBase("update itm_bodega set cantidad=0 ;");




        ResultSet productosTempR = conexionWeb.consultarBase(
                "SELECT * FROM sexylocuras.productos_locales "
                + "where id_locales=" + bodega + ";");

        try {
            productosTempR.beforeFirst();
            while (productosTempR.next()) {
                //Inserto en la base Local:
                String codigoProducto = productosTempR.getString(2);

                ResultSet productosTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.producto "
                        + "where cod_producto='" + codigoProducto + "' "
                        + ";");
                int filas = conexionLocal.obtenerFilas(productosTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la creaciÃ³n:
                    String query = "insert into bdmultiadmin.producto values("
                            + "'" + productosTempR.getString(2) + "',"//CODIGO
                            + "" + productosTempR.getString(7) + ","//COD_CAT
                            + "'" + productosTempR.getString(3) + "',"//NOMBRE
                            + "'" + productosTempR.getString(4) + "',"//DESCRIPCION
                            + "" + productosTempR.getString(6) + ","//CANTIDAD
                            + "" + productosTempR.getString(5) + ","//PRECIO
                            + "0,"
                            + "" + productosTempR.getString(8) + ","//PRECIO_COSTO
                            + "'2013-09-15',"
                            + "0"
                            + ");";

                   //System.out.println(query);
                    //Creo producto
                    conexionLocal.actualizarBaseResp(query);

                    //Creo itmBodega:
                    String cantidadMinima = "5";
                    conexionLocal.insertarDatos("insert into itm_bodega values(" + bodega + ",'" + productosTempR.getString(2) + "'," + productosTempR.getString(6) + "," + cantidadMinima + ")");

                } else {
                    //Si existe le actualizo
                    String cantidadMinima = "5";
                    //Actualizo Producto
                    conexionLocal.actualizarBase("update producto set "
                            + "stock_total=" + productosTempR.getString(6) + " , "
                            + "nombre='" + productosTempR.getString(3) + "', "
                            + "descripcion='" + productosTempR.getString(4) + "', "
                            + "cod_categoria=" + productosTempR.getString(7) + ", "
                            + "precio_normal=" + productosTempR.getString(5) + " "
                            + "where cod_producto like '" + productosTempR.getString(2)  + "';");
                    //Actualizo ItmProducto
                    conexionLocal.actualizarBase("update itm_bodega set cantidad=" + productosTempR.getString(6) + "  where cod_producto like '" + productosTempR.getString(2) + "' and cod_bodega=" + bodega + ";");

                }



            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    public void insertoDetallesPedidos(String codFactura) {

        //4.1)
        //Recorro los Detalles Pedidos registrados para esta bodega e 
        //ingreso los que no tengo registrados en la base local.


        ResultSet pedidoTempR = conexionWeb.consultarBase("SELECT * FROM sexylocuras.temp_dtl_pedido "
                + "where cod_bodega=" + bodega + " and cod_pedido=" + codFactura + " ;");

        try {
            pedidoTempR.beforeFirst();
            while (pedidoTempR.next()) {
                //Inserto en la base Local:
                String codigoPedido = pedidoTempR.getString(3);
                String codigoProducto = pedidoTempR.getString(4);
                String tipoDoc = pedidoTempR.getString(7);

                ResultSet dtlpedidoTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.dtl_pedido "
                        + "where "
                        + " cod_pedido=" + codigoPedido + " "
                        + " and  cod_producto='" + codigoProducto + "' "
                        + " and  tipoDoc='" + tipoDoc + "' "
                        + ";");
                int filas = conexionLocal.obtenerFilas(dtlpedidoTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la inserciÃ³n:

                    String query = "insert into bdmultiadmin.dtl_pedido values("
                            + "" + pedidoTempR.getString(3) + ","
                            + "'" + pedidoTempR.getString(4) + "',"
                            + "" + pedidoTempR.getString(5) + ","
                            + "" + pedidoTempR.getString(6) + ","
                            + "'" + pedidoTempR.getString(7) + "',"
                            + "'" + pedidoTempR.getString(8) + "',"
                            + "" + pedidoTempR.getString(9) + ""
                            + ");";

                   //System.out.println(query);
                    //Actualizo:
                    conexionLocal.actualizarBaseResp(query);



                }

            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    public void insertoDetallesKFactura(String codkfactura) {

        //5.1)
        //Recorro los Detalles KFactura registrados para esta bodega e 
        //ingreso los que no tengo registrados en la base local.


        ResultSet kfacturaTempR = conexionWeb.consultarBase("SELECT * FROM sexylocuras.temp_dtl_kfactura "
                + "where cod_bodega=" + bodega + " and cod_kfactura=" + codkfactura + " ;");

        try {
            kfacturaTempR.beforeFirst();
            while (kfacturaTempR.next()) {
                //Inserto en la base Local:
                String codigoPedido = kfacturaTempR.getString(3);
                String codigoProducto = kfacturaTempR.getString(4);
                String tipoDoc = kfacturaTempR.getString(8);

                ResultSet dtlpedidoTempL = conexionLocal.consultarBase("SELECT * FROM bdmultiadmin.dtl_kfactura "
                        + "where "
                        + " cod_kfactura=" + codigoPedido + " "
                        + " and  cod_producto='" + codigoProducto + "' "
                        + " and  tipoDoc='" + tipoDoc + "' "
                        + ";");
                int filas = conexionLocal.obtenerFilas(dtlpedidoTempL);
                if (filas == 0) {
                    //Si no existe entonces realizo la inserciÃ³n:

                    String query = "insert into bdmultiadmin.dtl_kfactura values("
                            + "" + kfacturaTempR.getString(3) + ","
                            + "'" + kfacturaTempR.getString(4) + "',"
                            + "" + kfacturaTempR.getString(5) + ","
                            + "" + kfacturaTempR.getString(6) + ","
                            + "" + kfacturaTempR.getString(7) + ","
                            + "'" + kfacturaTempR.getString(8) + "',"
                            + "" + kfacturaTempR.getString(9) + ","
                            + "'" + kfacturaTempR.getString(10) + "'"
                            + ");";

                   //System.out.println(query);
                    //Actualizo:
                    conexionLocal.actualizarBaseResp(query);



                }

            }


        } catch (SQLException ex) {
            Logger.getLogger(ProActualizaWebDB.class.getName()).log(Level.SEVERE, null, ex);
        }


    }
}
